//
//  ViewController.swift
//  03-表情键盘
//
//  Created by 房城鸿 on 15/10/18.
//  Copyright © 2015年 房兰峰. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    //TODO: - 注意这里有循环引用的问题
    
    //表情键盘控制器 -- 注意: 如果闭包中调用 self. 函数，同样会做 copy ,需要注意循环引用问题
    private lazy var keyboardVc:EmoticonViewController = EmoticonViewController { [weak self](emoticon) -> () in
//        print(emoticon.chs)
        self?.textView.insertEmoticon(emoticon)
    }
    
    // 把textView 中的属性文字全部提取出来  123[哈哈]
    @IBAction func emoticonText(sender: AnyObject) {
        
        print(textView.emoticonText)
        
//        let attrText = textView.attributedText
//        
//        //创建一个可变字符串
//        var strM = String()
//        
//        // 遍历
//        attrText.enumerateAttributesInRange(NSRange(location: 0, length: attrText.length), options: []) { (dict, range, _) -> Void in
//            //如果字典中包含 NSAttachment Key 就说明是图片
//            // 新的问题： 如何从 attachment 中获得 表情文字 【哈哈】
//            if let attachment = dict["NSAttachment"] as? EmoticonAttachment {
//                //print("表情图片\(attachment.chs)")
//                strM += attachment.chs ?? ""
//                
//            }else{
//                let str = (attrText.string as NSString).substringWithRange(range)
//                //print("文本内容 \(str)")
//                strM += str
//            }
//        }
//        print(strM)
    }
    
    
    private func insertEmoticon(emoticon:Emoticon){
        
        //0. 空表情
        if emoticon.isEmpty{
            return
        }
        
        //1. 删除按钮
        if emoticon.isRemove{
            //删除
            textView.deleteBackward()
            return
        }
        
        // 2. emoji 
        if emoticon.emoji != nil{
        
            textView.replaceRange(textView.selectedTextRange!, withText: emoticon.emoji!)
            
            return
        }
        
        // 3. 表情图片 .一定有图片
        // 注意，如果是单纯的复制，会造成覆盖，所以需要处理一下
        let imageText = EmoticonAttachment.emoticonAttributeText(emoticon, font: textView.font!)
        
        // 1. 从textView 从取出属性文本
        let strM = NSMutableAttributedString(attributedString: textView.attributedText)
        
        //2. 插入图片文字
        strM.replaceCharactersInRange(textView.selectedRange, withAttributedString: imageText)

        //3. 重新设置textView 的内容
        //3.1.记录当前光标位置
        let range = textView.selectedRange
        
        //3.2 .设置内容
        textView.attributedText = strM
    
        //3.3. 恢复光标位置
         textView.selectedRange = NSRange(location: range.location + 1, length: 0)
    }

    deinit{
        print("88")
    }
    
    @IBOutlet weak var textView: UITextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        textView.inputView = keyboardVc.view!
        
       let viewModel = EmoticonViewModel()
        viewModel.loadPackages()
        
        
    }
    
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        textView.becomeFirstResponder()
    }


}

